# -*- coding: utf-8 -*-
# @Author : zhaochen
# @Date   : 2019/10/18
# @File   : EG12_Past5ManagerGetCnt.py
# @E-mail : zhaochen@bbdservice.com

'''eof
name:过去5年内董监高、股东变更次数
code:EG12_Past5ManagerGetCnt
tableName:
columnName:
groups:企业通用模块
dependencies:EG_DSJ
type:常用指标
datasourceType:在线指标
description:
eof'''


import sys
import pandas as pd
import json
from datetime import datetime
reload(sys)
sys.setdefaultencoding('utf-8')

null_type_list = ['', ' ', None, 'null', 'Null', 'NULL', '/', '-', '--']


def FormatData(tableName):
    try:
        eg = EG_DSJ.get("data").get("R1103V3")[0].get(tableName)
        if eg in null_type_list:
            return None
        if isinstance(eg, list):
            return eg
        else:
            return None
    except:
        return None


# 统一转成datetime对象，只能转年月日的字符串
def date_format(str):
    import re
    r = re.compile(r'\D+')
    try:
        time = str[0:10]
        date = datetime.strptime(time, '%Y.%m.%d').strftime('%Y%m%d')
    except:
        try:
            date = datetime.strptime(time, '%Y-%m-%d').strftime('%Y%m%d')
        except:
            try:
                date = datetime.strptime(time, '%Y/%m/%d').strftime('%Y%m%d')
            except:
                try:
                    tmp = r.sub('', time)
                    date = datetime.strptime(tmp, '%Y%m%d').strftime('%Y%m%d')
                except:
                    date = None
    return date


def get_date_list():
    try:
        now = datetime.now()
        aaa = [(now + pd.tseries.offsets.DateOffset(months=i)).strftime('%Y%m%d') for i in [-5*12, 0]]
        return aaa
    except:
        return None

change_list1 = ['投资比例变更',
 '认缴的出资额,认缴的出资方式,认缴的出资时间,实缴的出资额,实缴的出资方式,实缴的出资时间,投资人',
 '投资人(股权)备案',
 '股东名录',
 '投资人(股权)变更',
 '股东、发起人（出资情况）更',
 '非公司企业法人主管部门（出资人）备案',
 '主管部门（出资人）变动备案',
 '股东（发起人）认缴出资额',
 '认缴的出资额,认缴的出资方式,认缴的出资时间,实缴的出资额,实缴的出资方式,实缴的出资时间',
 '其他变投资人信息变更',
 '自然人股东',
 '出资比例变更(%)',
 '股东（投资人）变更',
 '投资股权变更',
 '股东变更',
 '股东备案',
 '主管部门(出资人)名称',
 '投资人姓名',
 '股东改变姓名或名称',
 '股东变更(股权转让)',
 '投资人变更（包括出资额、出资方式、出资日期、投资人名称等）',
 '出资人变更',
 '投资者名称(姓名)变更',
 '投资人姓名变更',
 '投资人变更',
 '认缴的出资额,投资人',
 '出资比例变更',
 '股东或股份发起人改变姓名或名称',
 '投资人（股权）变更',
 '股东、投资人变更（股权转让）',
 '出资比例备案',
 '投资人（股权）备案',
 '投资人信息变更',
 '股东或股份发起人改变姓名或名称变更',
 '法人股东',
 '股东变更（股权转让）',
 '股东发起人',
 '投资人变更（包括出资额、出资方式、出资日期、投资人名称等）变更',
 '投资人',
 '股东名录变更',
 '投资人股权变更',
 '股权',
 '股东（投资人）',
 '出资比例',
 '出资日期变更',
 '股权变更',
 '出资日期备案',
 '投资人(股权)变更变更',
 '股东、发起人（出资情况）变更',
 '投资人信息变更（包括投资人、出资额、出资方式、出资日期、投资人名称等）',
 '股东名称变更',
 '出资方式备案',
 '出资方式变更',
 '投资者名称（姓名）变更',
 '股东、发起人、出资人（出资情况）',
 '股东、发起人（出资情况）',
 '股东（出资情况）',
 '其投资人股权变更',
 '投资者名称变更',
 '投资人变更（包括出资额变更、出资方式、出资日期、投资人名称等）']

change_list2 = ["高级管理人员备案（董事、监事、经理等）","董事成员","董事备案变更","主要人员备案","董事（理事）、经理、监事","监事备案","管理人员备案","管理人员变更","经理备案","高级管理人员变更","高级管理人员备案","经理/委员","高层人员备案","董事","监事成员","经理备案变更","高级管理人员备案（董事、监事、经理等） ","高管人员变更","监事备案变更","高管人员","董事成员变更","监事","董事、监事、经理及联合管理委员会委员","董事（理事）、经理、监事备案","董事备案","高级管理人员备案（董事、监事、经理等）变更","主要人员变更(董事会成员、监事、经理变更)","管理人员","经理","组织机构备案","组织机构变更"]



def EG12_Past5ManagerGetCnt():
    try:
        alter_list = FormatData("alterList")
        if alter_list is None:
            return u'缺失值'
        else:
            if len(alter_list) == 0:
                return 0
            else:
                result = set()
                flag = False
                date_list = get_date_list()
                for i in alter_list:
                    alt_item = i.get("altItem")
                    alt_date = date_format(i.get("altDate"))
                    if alt_date not in null_type_list and alt_item not in null_type_list:
                        flag = True
                        if date_list[0] < date_format(alt_date[0:10]) <= date_list[1] and (alt_item in change_list1\
                                                                                                   or alt_item in change_list2):
                            result.add(alt_date+alt_item)
                return len(result) if flag else u'缺失值'
    except:
        return u'缺失值'

result = EG12_Past5ManagerGetCnt()